package Day_0130;

/**
 * @author zxc
 * @date 2023/01/30 16:47
 **/
public class StringDemo {
    public static void main(String[] args) {
        /**
         * String,StringBuilder和StringBuffer之间的区别
         * 1.String ：
         * private final char value[];
         * ===》 即，String类型底层是被final关键字修饰的字符数组（不可变长的字符数组）;
         * 特点 ：
         * （1）String是只读字符串，它并不是基本数据类型，而是一个对象。
         * （2）从底层源码来看是一个final类型的字符数组，所引用的字符串不能被改变，一经定义，无法再增删改。
         * （3）每次对String的操作都会生成新的String对象。
         * 注意 ：
         * 每次+操作 ：（针对于String类型的字符串累加操作，每次都会生成一个新的String对象）
         * 隐式在堆上new了一个跟原字符串相同的StringBuilder对象，再调用append方法 拼接+后面的字符。
         *
         * 2.StringBuffer和StringBuilder他们两都继承了AbstractStringBuilder抽象类;
         * char[] value;
         * 共同点 ：
         * （1）StringBuffer和StringBuilder的底层都是可变的字符数组，
         * （即，若是要频繁地对于字符串进行修改操作的话，最好使用StringBuffer和StringBuilder类型）
         * 所以在进行频繁的字符串操作时，建议使用StringBuffer和StringBuilder来进行操作。
         * 不同点 ：
         * （1）StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁，所以是线程安全的。
         * （2）StringBuilder 并没有对方法进行加同步锁，所以是非线程安全的。
         * 同时，由于StringBuilder类并没有加同步锁，执行效率高;
         */
    }
}
